package com.study.hot.jetpack.hilt.model

import com.study.hot.jetpack.hilt.annotation.BindElecEngine
import com.study.hot.jetpack.hilt.annotation.BindGasEngine
import javax.inject.Inject

/**
 * <pre>
 *     author : slx
 *     time   : 2020/11/24
 *     desc   : 卡车类，构造方法注入Driver
 * </pre>
 */
class Truck @Inject constructor(val driver: Driver) {

    // Engine是一个接口，没有构造函数，不能直接注入到另一个类中
    // 声明为一个字段，必须使用@Inject注解，在构造函数中注入则无需该注解
    @BindGasEngine
    @Inject
    lateinit var gasEngine: Engine

    // 如果一个接口多个实现类都需要注入，需要使用自定义注解指明需要哪个实现类实例化
    @BindElecEngine
    @Inject
    lateinit var elecEngine: Engine

    fun deliver() {
        println("deliver by driver:${driver}")
    }

    fun deliverByGas() {
        gasEngine.start()
        elecEngine.shutdown()
        println("deliver by driver:${driver}")
        gasEngine.shutdown()
        elecEngine.shutdown()
    }
}